package cn.iocoder.yudao.module.api.trade.order.dto;

import cn.iocoder.yudao.framework.business.basic.pojo.vo.BaseVO;
import cn.iocoder.yudao.framework.business.basic.pojo.vo.UserSimpleVO;
import cn.iocoder.yudao.framework.common.enums.TerminalEnum;
import cn.iocoder.yudao.module.api.trade.delivery.enums.DeliveryTypeEnum;
import cn.iocoder.yudao.module.api.trade.order.enums.TradeOrderCancelTypeEnum;
import cn.iocoder.yudao.module.api.trade.order.enums.TradeOrderStatusEnum;
import cn.iocoder.yudao.module.api.trade.order.enums.TradeOrderTypeEnum;
import lombok.Data;

import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 订单信息 Response DTO
 *
 * @author HUIHUI
 */
@Data
public class TradeOrderRespDTO extends BaseVO {

    // ========== 订单基本信息 ==========
    /**
     * 店铺编号
     */
    private Long shopId;
    /**
     * 交易单号
     * 例如说，1146347329394184195
     */
    private String no;
    /**
     * 订单类型
     * 枚举 {@link TradeOrderTypeEnum}
     */
    private Integer type;
    /**
     * 配送类型/服务方式，枚举 {@link DeliveryTypeEnum}
     */
    private Integer deliveryType;
    /**
     * 发货物流单号，如果无需发货则设置为空串，不用再添加额外字段
     */
    private String logisticsNo;
    /**
     * 订单来源
     * 枚举 {@link TerminalEnum}
     */
    private Integer terminal;
    /**
     * 用户编号
     */
    private Long userId;
    /**
     * 用户 IP
     */
    private String userIp;
    /**
     * 用户备注
     */
    private String userRemark;
    /**
     * 订单状态
     * 枚举 {@link TradeOrderStatusEnum}
     */
    private Integer status;
    /**
     * 购买的产品数量
     */
    private Integer productCount;
    /**
     * 订单完成时间
     */
    private LocalDateTime finishTime;
    /**
     * 订单取消时间
     */
    private LocalDateTime cancelTime;
    /**
     * 取消类型
     * 枚举 {@link TradeOrderCancelTypeEnum}
     */
    private Integer cancelType;
    /**
     * 商家备注
     */
    private String remark;
    /**
     * 是否评价
     */
    private Boolean commentStatus;

    // ========== 价格 + 支付基本信息 ==========
    /**
     * 产品原价，单位：分
     */
    private Integer totalPrice;
    /**
     * 应付金额（总），单位：分
     */
    private Integer payPrice;
    /**
     * 配送费，单位：分
     */
    private Integer deliveryPrice;
    /**
     * 使用的积分
     */
    private Integer deductPoint;
    /**
     * 赠送的积分
     */
    private Integer givePoint;
    /**
     * 使用的联盟豆，目的：用于后续取消或者售后订单时，需要归还赠送
     */
    private Integer deductCryptocurrency;
    /**
     * 赠送的联盟豆，目的：用于后续取消或者售后订单时，需要扣减赠送
     */
    private Integer giveCryptocurrency;
    /**
     * 支付单号
     */
    private String payNo;
    /**
     * 是否已支付
     */
    private Boolean payStatus;
    /**
     * 支付时间
     */
    private LocalDateTime payTime;
    /**
     * 收货时间
     */
    private LocalDateTime receiveTime;
    /**
     * 收件人区县编号
     */
    private Integer receiverAreaId;
    /**
     * 收件人详细地址
     */
    private String receiverDetailAddress;
    /**
     * 收件人名称
     */
    private String receiverName;
    /**
     * 收件人手机
     */
    private String receiverMobile;
    /**
     * 推广人编号，关联 {@code BrokerageUserDO#getUserId()} 字段，即 {@link UserSimpleVO#getId()} 字段
     */
    private Long brokerageUserId;
    /**
     * 团购套餐编号，关联 GrouponPackageDO 的 id 字段
     */
    private Long grouponPackageId;
    /**
     * 用餐人数
     */
    private Integer dinePeoples;
    /**
     * 预定日期
     */
    private LocalDate reserveDate;
    /**
     * 预定时段，如12:00-12:30
     */
    private String reservePeriod;

}
